/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ventas.datamodel;

import entities.C;
import entities.NivelPrecio;
import entities.Pedido;
import entities.Producto;
import entities.ProductoTalla;
import entities.PvpInternacional;
import entities.SerieTallaje;
import entities.interfaces.LineaPedidoInterfaz;
import entities.interfaces.PedidoInterfaz;
import facades.CFacade;
import facades.LineaPedidoFacade;
import facades.ProductoFacade;
import facades.ProductoTallaFacade;
import facades.PvpInternacionalFacade;
import facades.SerieTallajeFacade;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import javax.inject.Inject;
import qualifiers.resources.NivelPrecioNormal;
import ventas.beans.MultiplicadoresBean;

/**
 *
 * @author damfercer
 */
public class TablaPedidoDataModel implements Serializable{
    @Inject
    CFacade cFacade;
    @Inject
    SerieTallajeFacade serieTallajeFacade;
    @Inject
    ProductoFacade productoFacade;
    @Inject
    ProductoTallaFacade productoTallaFacade;
    @Inject
    LineaPedidoFacade lineaPedidoFacade;
    @Inject
    PvpInternacionalFacade pvpInternacionalFacade;
    @Inject
    MultiplicadoresBean multiplicadoresBean;
    @Inject
    @NivelPrecioNormal
    NivelPrecio nivelPrecioNormal;
    private String sql;
    private PedidoInterfaz pedido;

    /**
     * @return the sql
     */
    public String getSql() {
        return sql;
    }

    /**
     * @param sql the sql to set
     */
    public void setSql(String sql) {
        this.sql = sql;
    }
    
    
    public List<C> getCDeDataModel(){
        return cFacade.filtrarC(sql);
    }
    
    public List<C> getCDePedido(){
        return cFacade.getCDePedido(pedido);
    }
    
    public List<SerieTallaje> getSeriesTallajeDeC(C c){
        return serieTallajeFacade.getSeriesTallajeDeC(c, sql);
    }
    
    public List<SerieTallaje> getSeriesTallajeDePedidoYC(C c){
        return serieTallajeFacade.getSeriesTallajeDePedidoYC(pedido, c);
    }
    
    public List<Producto> getTodosProductosDeSerieTallajeYC(C c, SerieTallaje serieTallaje){
        return productoFacade.getProductosDeSerieTallajeYC(pedido, c, serieTallaje, sql);
    }
    
    public List<Producto> getTodosProductosDePedidoSerieTallajeYC(C c, SerieTallaje serieTallaje){
        return productoFacade.getProductosDePedidoSerieTallajeYC(pedido, c, serieTallaje);
    }
    
    public List<ProductoTalla> getTodosProductosTallaAMostrar(){
        return productoTallaFacade.getProductosTallaAMostrar(pedido,sql);
    }

    
    public Integer consultarUnidadesDePedidoDeC(C c){
        Integer cantidad=0;
        for (LineaPedidoInterfaz lineaPedido : pedido.getLineas()) {
            if(lineaPedido.getProductoTalla().getProducto().getC().equals(c)){
                cantidad+=lineaPedido.getCantidad();
            }
        }
        return cantidad;
    }
    
    public BigDecimal consultarTotalDePedidoDeC(C c){
        BigDecimal total=BigDecimal.ZERO;
        for (LineaPedidoInterfaz lineaPedido : pedido.getLineas()) {
            if(lineaPedido.getProductoTalla().getProducto().getC().equals(c)){
                if(pedido.getClass().getName().equals("entities.Pedido")){
                    Pedido p=(Pedido)pedido;
                    if(p.getCliente().getPaisFiscal().getDescripcion().equals("Spain")){
                        total=total.add(lineaPedido.getProductoTalla().getProducto().getPvp().multiply(new BigDecimal(lineaPedido.getCantidad())).divide(multiplicadoresBean.recuperarMultiplicadorDeProductoYPedido(lineaPedido.getProductoTalla().getProducto(), p), RoundingMode.HALF_UP));
                    }
                    else{
                        PvpInternacional pvpInternacional=pvpInternacionalFacade.getPvpInternacionalDeProductoNivelPrecioYPais(lineaPedido.getProductoTalla().getProducto(), p.getCliente().getPaisFiscal(),nivelPrecioNormal);
                        if(pvpInternacional!=null){
                            total=total.add(pvpInternacional.getPvp().multiply(new BigDecimal(lineaPedido.getCantidad())).divide(multiplicadoresBean.recuperarMultiplicadorDeProductoYPedido(lineaPedido.getProductoTalla().getProducto(), p), RoundingMode.HALF_UP));
                        }
                    }
                }
                else if(pedido.getClass().getName().equals("entities.PedidoFabrica")){
                    total=total.add(lineaPedido.getProductoTalla().getProducto().getCotizacion().multiply(new BigDecimal(lineaPedido.getCantidad())));
                }
            }
        }
        return total;
    }
    
    
    /**
     * @return the pedido
     */
    public PedidoInterfaz getPedido() {
        return pedido;
    }

    /**
     * @param pedido the pedido to set
     */
    public void setPedido(PedidoInterfaz pedido) {
        this.pedido = pedido;
    }
}
